import numpy as np
from sklearn.decomposition import PCA


def cal_normal(points):
	# # 生成示例点云数据
	# points = np.array([
	#     [1, 0, 0],
	#     [2, 0, 0],
	#     [3, 0, 0],
	#     [1, 1, 0],
	#     [2, 1, 0],
	#     [3, 1, 0],
	#     [1, 2, 0],
	#     [2, 2, 0],
	#     [3, 2, 0]
	# ])

	# 进行PCA分析
	pca = PCA(n_components=3)
	pca.fit(points)

	# 平面法线是PCA中最小特征值对应的特征向量
	normal = pca.components_[-1]
	print(pca.components_)
	# 归一化法线向量
	normal = normal / np.linalg.norm(normal)

	print("Plane normal:", normal)
    return normal





